Go Modules
go directive
go directiveはモジュールが使用する最小のGoバージョンを指定する
Go 1.21以前では主にアドバイス的な役割を果たしていた
つまり、後方互換性があれば実行自体はできた
Go 1.21以降ではこの指定が強制力を持つ。指定されたバージョンより古いGoツールチェインではエラーが発生します。
GOTOOLCHAINがautoなら、勝手に新しいGoツールチェインをインストールして使ってくれる
toolchain directive
特定のツールチェインバージョンを強制 = 特定のGoランタイムを指定
toolchainで指定されたツールチェインバージョンが強制され、それがローカルになければダウンロードされる
go directive記載のバージョンよりも高いバージョンじゃないとだめ
main moduleかつ、ローカルのgo toolchainのバージョンより高いときにワークする
go directiveとtoolchain directiveの使い分け
go directiveは最小バージョンの指定であり、古いバージョンだとエラーになる(go 1.21以上では)
toolchain directiveは推奨バージョンの指定と同義
GOTOOLCHAINがautoなら切り替えてくれる、そうじゃないなら自動切り替えは置きない
つまり、推奨の指定
replace directive
replace golang.org/x/net v1.2.3 => example.com/fork/net v1.4.5 のように、 => の左辺を右辺のモジュールに置き換える
=> の左辺はバージョンを指定すればそのバージョンのみが置き換え対象となり、バージョンを指定しなければ全バージョンが対象となる
=> の右辺はローカルディレクトリでも、インターネットに公開されているモジュールパスでも良い